Shell学习笔记07-if条件语句的知识

GO


对于if条件语句,简单的说,其语义类似于汉语里的如果……那么……。if条件语句是Linux运维人员在实际生产工作中使用得最频繁也是最重要的语句,因此,请务必重视if条件语句的知识,并牢固掌握。

1. if条件语句的语法

1.1. 单分支结构

if条件语句的单分支结构主题就是如果……,那么……

第一种语法:

1
2
3
4
if <条件表达式>
then
指令
fi

第二种语法:

1
2
3
if <条件表达式>; then
指令
fi

在这里:

  • <条件表达式>可以是test[][[]](())等条件表达式,甚至可以直接使用命令作为条件表达式。
  • 条件语句可以嵌套,即if语句里面还有if语句。弹药注意每个if条件语句中都要有一个与之对应的fi,每个if和它下面最近的fi成对搭配,语法示例如下:

    1
    2
    3
    4
    5
    6
    7
    if <条件表达式>
    then
    if <条件表达式>
    then
    指令
    fi
    fi
  • 通常在书写Shell条件语句编程时,要让成对的条件语句关键字的缩进相对应,以便于阅读浏览。

  • 文件条件表达式[ -f "$file1" ] && echo 1就等价于下面的if条件语句:
    1
    2
    3
    if [ -f "$file1" ] ; then
    echo 1
    fi

1.2. 双分支结构

if条件语句的双分支结构主题则为如果……,那么……,否则……

语法如下:

1
2
3
4
5
6
if <条件表达式>
then
指令集1
else
指令集2
fi

在这里:

  • 也可以把thenif放在一行用分号;隔开
  • 文件测试条件表达式[ -f "$file1" ] && echo 1 || echo 0 就相当于下面的双分支的if条件语句:
    1
    2
    3
    4
    5
    6
    if [ -f "$file1" ]
    then
    echo 1
    else
    echo 0
    fi

1.3. 多分支结构

if条件语句多分支结构的主题为:如果……,那么……,否则如果……,那么……,否则如果……,那么……,…… 否则……

语法为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if <条件表达式1>
then
指令1
elif <条件表达式2>
then
指令2
fi
------多个elif------
if <条件表达式1>
then
指令1
elif <条件表达式2>
then
指令2
elif <条件表达式3>
then
指令3
......
else
指令n
fi

在这里:

  • 注意多分支elif的写法,每个elif都要带有then
  • 最后结尾的else后面没有then

2. if条件语句多种条件表达式语法

if条件语句(包括多分支if)的<条件表达式>部分可以是test[][[]](())等条件表达式,甚至还可以直接使用命令作为条件表达式,具体的语法如下:

  • test条件表达式

    1
    2
    3
    4
    if test 表达式
    then
    指令
    fi
  • []条件表达式

    1
    2
    3
    4
    if [ 字符串或算术表达式 ]
    then
    指令
    fi
  • [[]]条件测试表达式

    1
    2
    3
    4
    if [[ 字符串表达式 ]]
    then
    指令
    fi
  • (())条件表达式

    1
    2
    3
    4
    if ((算术表达式))
    then
    指令
    fi
  • 命令表达式

    1
    2
    3
    4
    if 命令
    then
    指令
    if

提示:以上表达式除了语法不通之外,具体的应用是一致的,实际工作场景中,只需选择一种适合自己习惯的表达式就好。

3. 单分支if条件语句实践

把下面测试文件中条件表达式的语句改成if条件语句:

  • 1、[ -f /etc/hosts ] && echo "[1]"
  • 2、[[ -f /etc/hosts ]] && echo "[[1]]"
  • 3、test -f /etc/hosts && echo "test1"
    参考答案如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 1的答案
    if [ -f /etc/hosts ]
    then
    echo "[1]"
    fi
    # 2的答案
    if [[ -f /etc/hosts ]]
    then
    echo "[[1]]"
    fi
    # 3的答案
    if test -f /etc/hosts
    then
    echo "test1"
    fi

OK

0%